<script>
 import { GETUnreadNotifyList, getMyData, GETUserOANumber } from '@/api/interface.js'
 export default {
 	onLaunch: function() {
 		console.log('App Launch');
 		// 初始化订阅消息相关配置
 		this.initSubscribeMessageConfig();
 	},
 	onShow: function() {
 		console.log('App Show');
 		// 注意：不再自动请求订阅消息权限，需要用户点击触发
 		// 请在具体页面中通过用户交互调用this.$app.globalData.requestSubscribeMessageByUser();
 		// 进入前台时，如果需要手势校验且本次会话未验证，则跳转登录页进行手势校验
 		const token = uni.getStorageSync('token');
 		const gestureEnabled = uni.getStorageSync('gestureEnabled');
 		const gestureVerified = uni.getStorageSync('gestureVerified');
 		if (token && gestureEnabled && gestureVerified !== true) {
 			const pages = getCurrentPages();
 			const currentRoute = pages && pages.length ? pages[pages.length - 1].route : '';
 			if (currentRoute !== 'pages/index/login') {
 				uni.reLaunch({ url: '/pages/index/login' });
 			}
 		}
	},
 	onHide: function() {
 		console.log('App Hide');
 		// 切到后台时清除本次会话的手势校验标记
 		uni.removeStorageSync('gestureVerified');
		// 清理角标轮询定时器
		if (this._badgeTimer) {
			clearInterval(this._badgeTimer);
			this._badgeTimer = null;
		}
	},
	data() {
		return {
			// 订阅消息模板ID配置
			subscribeMessageConfig: {
 				unreadNotice: {
 					templateId: '9yjsEEOp2gnaWJTR6MqhonTNrrK88GFEhMnvUEx6h4s', // 未读消息提醒模板ID
 					title: '未读消息提醒',
 					description: '您有新的未读消息，请及时查看'
 				},
 				approvalProgress: {
 					templateId: 'JNfZ9hgoxm6-y2UVFiiJ0FJYBYH3nSGPGFS_PsAtwwk', // 审批进度通知模板ID
 					title: '审批进度通知',
 					description: '您的审批申请有新的进展，请及时查看'
 				}
 			},
 			// 上次请求订阅的时间，避免频繁请求
 			lastSubscribeTime: 0,
 			// 订阅过期时间（24小时）
 			subscribeExpireTime: 24 * 60 * 60 * 1000
 		}
 	},
 	methods: {
 		// 初始化订阅消息配置
 		initSubscribeMessageConfig() {
 			// 这里可以从服务器获取最新的模板ID配置
 			// 目前使用默认配置，实际应用中应该从服务器获取
 			// this.fetchSubscribeTemplates();
 		},
 		
 		// 获取订阅消息模板配置
 		fetchSubscribeTemplates() {
 			// 实际项目中应该调用API获取模板ID
 			console.log('获取订阅消息模板配置');
 		},
 		
 		// 检查是否可以请求订阅消息权限（供页面判断是否显示订阅按钮）
 		canRequestSubscribeMessage() {
 			const now = Date.now();
 			return now - this.lastSubscribeTime > this.subscribeExpireTime;
 		},
 		
 		// 请求订阅消息权限（由用户点击触发）
 		requestSubscribeMessageByUser() {
 			const now = Date.now();
 			console.log('开始请求订阅消息权限');
 			// 如果距离上次请求订阅时间超过24小时，则重新请求
 			if (now - this.lastSubscribeTime > this.subscribeExpireTime) {
 				// 调试输出配置的模板ID
 				console.log('未读消息提醒模板ID:', this.subscribeMessageConfig.unreadNotice.templateId);
 				console.log('审批进度通知模板ID:', this.subscribeMessageConfig.approvalProgress.templateId);
 				
 				// 获取有效的模板ID列表
 				const templates = this.getValidTemplateIds();
 				console.log('获取到的模板ID列表:', templates);
 				
 				if (templates.length === 0) {
 					console.log('没有配置有效的订阅消息模板ID');
 					return;
 				}
 				
 				// 请求订阅消息权限
 				uni.requestSubscribeMessage({
 					tmplIds: templates,
 					success: (res) => {
 						console.log('订阅消息请求结果:', res);
 						this.handleSubscribeResult(res);
 						this.lastSubscribeTime = Date.now();
 					},
 					fail: (err) => {
 						console.error('订阅消息请求失败:', err);
 					}
 				});
 			} else {
 				console.log('距离上次订阅时间不足24小时，暂不重复请求');
 			}
 		},
 		
 		// 获取有效的模板ID列表
 		getValidTemplateIds() {
 			// 直接返回真实的模板ID，确保订阅功能可用
 			return [
 				'9yjsEEOp2gnaWJTR6MqhonTNrrK88GFEhMnvUEx6h4s', // 未读消息提醒模板ID
 				'JNfZ9hgoxm6-y2UVFiiJ0FJYBYH3nSGPGFS_PsAtwwk'  // 审批进度通知模板ID
 			];
 		},
 		
 		// 处理订阅结果
 		handleSubscribeResult(res) {
 			for (const templateId in res) {
 				const result = res[templateId];
 				if (result === 'accept') {
 					console.log(`用户同意订阅模板: ${templateId}`);
 					// 可以将订阅状态保存到本地或服务器
 					this.saveSubscribeStatus(templateId, true);
 				} else if (result === 'reject') {
 					console.log(`用户拒绝订阅模板: ${templateId}`);
 					this.saveSubscribeStatus(templateId, false);
 				}
 			}
 		},
 		
 		// 保存订阅状态
 		saveSubscribeStatus(templateId, isSubscribed) {
 			const subscribeStatus = uni.getStorageSync('subscribeStatus') || {};
 			subscribeStatus[templateId] = {
 				isSubscribed,
 				time: Date.now()
 			};
 			uni.setStorageSync('subscribeStatus', subscribeStatus);
 		},
 		
		// 获取订阅状态
		getSubscribeStatus(templateId) {
			const subscribeStatus = uni.getStorageSync('subscribeStatus') || {};
			return subscribeStatus[templateId] || { isSubscribed: false, time: 0 };
		},

		// ===== 角标：半实时刷新 =====
		formatBadgeText(count) {
			// 小于等于99条直接显示数字；大于99显示“99+”
			if (!count || count <= 0) return '';
			return count > 99 ? '99+' : String(count);
		},
		// 当前是否处于 TabBar 页面上下文
		isTabbarCurrentPage() {
			try {
				const pages = getCurrentPages && typeof getCurrentPages === 'function' ? getCurrentPages() : []
				const currentRoute = pages && pages.length ? pages[pages.length - 1].route : ''
				const tabbarRoutes = ['pages/index/index','pages/examine/examine','pages/message/message','pages/mine/mine']
				return tabbarRoutes.includes(currentRoute)
			} catch (e) { return false }
		},
		updateMessageBadge(count) {
			const text = this.formatBadgeText(count);
			const msgTabIndex = 2; // pages.json中“消息中心”位于第3个tab
			if (!this.isTabbarCurrentPage()) return;
			if (!text) {
				uni.removeTabBarBadge({ index: msgTabIndex });
				return;
			}
			uni.setTabBarBadge({ index: msgTabIndex, text });
		},
		async refreshUnreadCount() {
			try {
				const res = await GETUnreadNotifyList({ pageNo: 1, size: 200 });
				let count = 0;
				if (res && res.code === 0) {
					// 若接口返回的就是未读列表，直接用长度；否则过滤readStatus=false
					const list = Array.isArray(res.data) ? res.data : [];
					count = list.length > 0 && typeof list[0]?.readStatus !== 'undefined'
						? list.filter(item => item.readStatus === false).length
						: list.length;
				}
				this.updateMessageBadge(count);
			} catch (err) {
				console.error('刷新未读消息角标失败:', err);
			}
		},

		// 我的角标：使用 getMyData 的 dbNum
		updateMineBadge(count) {
			const text = this.formatBadgeText(count);
			const mineTabIndex = 3; // pages.json中“我的”位于第4个tab
			if (!this.isTabbarCurrentPage()) return;
			if (!text) {
				uni.removeTabBarBadge({ index: mineTabIndex });
				return;
			}
			uni.setTabBarBadge({ index: mineTabIndex, text });
		},
		async refreshMineDbNum() {
			try {
				const res = await getMyData();
				let count = 0;
				if (res && res.code === 0 && res.data) {
					count = Number(res.data.dbNum) || 0;
				}
				this.updateMineBadge(count);
			} catch (err) {
				console.error('刷新“我的”角标失败:', err);
			}
		},

 		updateOaBadge(count) {
 			const text = this.formatBadgeText(count);
 			const oaTabIndex = 1; // pages.json中“OA审批”位于第2个tab
 			if (!this.isTabbarCurrentPage()) return;
 			if (!text) {
 				uni.removeTabBarBadge({ index: oaTabIndex });
 				return;
 			}
 			uni.setTabBarBadge({ index: oaTabIndex, text });
 		},
 		async refreshOaBadge() {
 			try {
 				const res = await GETUserOANumber();
 				let todo = 0, copy = 0;
 				if (res && res.code === 0 && res.data) {
 					const data = res.data || {};
 					todo = Number(data.daiban || 0);
 					copy = Number(data.chaosong || 0);
 				}
 				this.updateOaBadge(todo + copy);
 			} catch (err) {
 				console.error('刷新OA审批角标失败:', err);
 			}
 		}
 	}
}
</script>

<style lang="scss">
	
	/*每个页面公共css */
	@import "./uni_modules/uview-plus/index.scss";
	/*每个页面公共css */
	
	/* 针对 TabBar 中的角标（不影响其他位置的 badge） */
	.uni-tabbar .uni-tabbar-item .uni-badge {
	/* 核心：通过 transform 微调位置 */
	/* 原有默认定位是 translate(50%, -50%)，在此基础上追加偏移 */
		transform: translate(30%, -50%) translate(2px, -3px) !important; 
	/* 说明：
		- 第一个 translate(50%, -50%) 是原生默认定位（右上角）
		- 第二个 translate(x, y) 是额外偏移：
		x 为正 → 向右移，x 为负 → 向左移
		y 为负 → 向上移，y 为正 → 向下移
		- 数值可根据需求调整（如 2px、-3px）
	*/
	}

	@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-ExtraLight.otf') format('opentype');
			font-weight: 200;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Light.otf') format('opentype');
			font-weight: 300;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Normal.otf') format('opentype');
			font-weight: 400;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Regular.otf') format('opentype');
			font-weight: 500;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Medium.otf') format('opentype');
			font-weight: 600;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Bold.otf') format('opentype');
			font-weight: 700;
			font-style: normal;
		}
	
		@font-face {
			font-family: 'SourceHanSansCN';
			src: url('https://lzdbuck.oss-cn-beijing.aliyuncs.com/fonts/SourceHanSansCN-Heavy') format('opentype');
			font-weight: 900;
			font-style: normal;
		}
		page{
			font-family: "SourceHanSansCN";
			background: #f2f3f5;
		}

		
</style>
